#include <iostream>

using namespace std;

// s 是否是 t 的一个子序列


bool uglyNumber(int n) {
  // 用递归的方法实现 uglyNumber

  // 当我们思考一个递归算法的时候：
  // 1. 递归终止条件是什么：不需要运算就能得到的结论
  // 1,2,3,4,5,6
  // 7
  if (n <= 0) { return false; }

  if (n < 7) { return true; }

  // 2. 递归过程是什么
  // 能被 2 整除就一直除下去
  if (n % 2 == 0) {
    return uglyNumber(n / 2);
  }
  
  if (n % 3 == 0) {
    return uglyNumber(n / 3);
  }

  if (n % 5 == 0) {
    return uglyNumber(n / 5);
  }

  return false;
}

class Demo {
public:
  Demo() {
    cout << "A demo is created." << endl;
  }

  ~Demo() {
    cout << "A demo is deallocated." << endl;
  }
};

int main(int argc, char const *argv[])
{
  // 写出 uglyNumber(52) 递归调用过程
  // uglyNumber(52)
  // uglyNumber(26)

  cout << uglyNumber(52) << endl;

  // 自动变量
  // 会自动创建和销毁的变量
  // Demo d1;

  // 手动变量
  // new - C++ 中的一个操作服，专门用来创建手动变量
  // new 操作符返回创建出来的变量的位置
  Demo *d2 = new Demo();
  // 手动删除变量
  // delete 操作符接受的是要删除的变量的位置
  delete d2; 

  int n = 10; // 自动变量
  int *pn = new int{10};
  delete pn;

  string str {"Hello"};
  string *pStr = new string {"hello"};
  delete pStr;
  return 0;
}

